package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.event.ListDataListener;
import javax.swing.table.AbstractTableModel;
import modelo.Categoria;
import modelo.CategoriaDAO;
import modelo.DetalleCompra;
import modelo.DetalleCompraDAO;
import modelo.Ingrediente;
import modelo.IngredienteDAO;
import modelo.Plantilla;
import modelo.PlantillaDAO;

import Vista.NewJDialogDetalleCompra;
import Vista.NewJDialogPlantilla;

public class ControladorDetalle {
	private class Detallecmp {

		public Detallecmp(Ingrediente ing, int cant) {
			super();
			this.ing = ing;
			this.cant = cant;
		}

		public Ingrediente ing;
		public int cant;
	}

	ArrayList<Detallecmp> detalles;

	private NewJDialogDetalleCompra detalle;

	private AbstractTableModel modelo;

	public ControladorDetalle(JFrame frm) {
		detalles = new ArrayList<ControladorDetalle.Detallecmp>();
		detalle = new NewJDialogDetalleCompra(frm, this);

		detalle.getjBtoAceptar().addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (detalles.isEmpty()) {
					JOptionPane.showMessageDialog(null,
							"Agregue algun Ingrediente.");
					return;
				}
				/*
				 * DetalleCompra dc = new
				 * DetalleCompra(detalle.getjTxtCodigoCompra
				 * ().getText(),detalle.
				 * getjTxtCodigoIngrediente().getText(),Integer
				 * .parseInt(detalle.getjTxtCantidad().getText()),
				 * Float.parseFloat(detalle.getjTxtMontoCompra().getText()));
				 * DetalleCompraDAO dcdao = new DetalleCompraDAO();
				 * IngredienteDAO idao = new IngredienteDAO(); Ingrediente ing =
				 * idao.ConsultarIngrediente(dc.getCodigoIngrediente());
				 * ing.setCantidad(ing.getCantidad() + dc.getCantidad());
				 * idao.ModificarIngrediente(ing);
				 * 
				 * dcdao.registrarDetalleCompra(dc);
				 */
				detalle.dispose();
				JOptionPane.showMessageDialog(null, " Compra registrada",
						"Informacion", JOptionPane.INFORMATION_MESSAGE);
			}

		});
		detalle.setVisible(true);
		detalle.getjBtoSalir().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				detalle.dispose();
			}
		});
		IngredienteDAO idao = new IngredienteDAO();
		detalle.getjCmbIngredientes().setModel(
				new DefaultComboBoxModel(idao.ConsultarIngredientes()));
		modelo = new AbstractTableModel() {
			@Override
			public Object getValueAt(int rowIndex, int columnIndex) {
				Detallecmp ing = detalles.get(rowIndex);
				switch (columnIndex) {
				case 0:
					return ing.ing.getNombreIngrediente();
				case 1:
					return ing.cant;
				}
				return null;
			}

			@Override
			public String getColumnName(int col) {
				switch (col) {
				case 0:
					return "Nombre Ingrediente";
				case 1:
					return "Cantidad";
				}

				return null;
			}

			@Override
			public int getRowCount() {

				return detalles.size();
			}

			@Override
			public int getColumnCount() {
				return 2;
			}
		};
		detalle.getjTabledetalleCompra().setModel(modelo);
		detalle.getjButtonagregarcompra().addActionListener(new ActionListener() {		
			@Override
			public void actionPerformed(ActionEvent e) {
				if(detalle.getjTxtCantidad().getText().isEmpty()){
					JOptionPane.showMessageDialog(null, " Debe colocar la cantidad", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				}
				else{
				detalles.add(new Detallecmp((Ingrediente) detalle.getjCmbIngredientes().getSelectedItem(), Integer.parseInt(detalle.getjTxtCantidad().getText())));
				modelo.fireTableDataChanged();
				}
				
			}
		});
		
		detalle.getjButtonquitarIngred().addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(detalle.getjTabledetalleCompra().getSelectedRow() == -1){
					JOptionPane.showMessageDialog(null, " Debe Seleccionar un Ingrediente", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				} 
				else{
				detalles.remove(detalle.getjTabledetalleCompra().getSelectedRow());
				modelo.fireTableDataChanged();
				}
	        }
         });
		detalle.getjBtoAceptar().addActionListener(new ActionListener() {		
			@Override
			public void actionPerformed(ActionEvent e) {
				DetalleCompraDAO ddao = new DetalleCompraDAO();
				for (Detallecmp d : detalles) {
					ddao.registrarCompra(new DetalleCompra(0, d.ing.getCodigoIngrediente(), d.cant));
				}
			}
		});

	}
}
